package uade.distribuidas.server.domain;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.Table;

import uade.distribuidas.repo.dto.CondicionVentaDTO;
import uade.distribuidas.repo.dto.CotizacionDTO;
import uade.distribuidas.repo.dto.ItemCotizacionDTO;
/**
 * 
 */	
@Entity
@Table(name="cotizaciones")
public class Cotizacion  {
	

	@Id
	@GeneratedValue(strategy=GenerationType.AUTO)
	@Column(name = "idcotizacion")
	private Integer id;
	
	@ManyToOne
	@JoinColumn(name="idcliente")
	private Cliente cliente;
	
	@ManyToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
	@JoinTable(name = "cotizaciones_condiciones",
	joinColumns = { 
			@JoinColumn(name = "idcotizacion", nullable = false, updatable = false) 
			}, 
	inverseJoinColumns = { 
			@JoinColumn(name = "idcondicion",nullable = false, updatable = false) 
			}
	)
	private List<CondicionVenta> condiciones;
	
	@Column(name="fecharemision")
	private Date fechaRemision;
	
	@OneToMany(cascade=CascadeType.ALL)
	@JoinColumn(name="idcotizacion")
	private  List<ItemCotizacion> items;
	
	@OneToOne(cascade=CascadeType.ALL)
	@JoinColumn(name="idsolicitud")
	private Solicitud solicitud;
	
	@Column(name="termino")
	private  Integer termino;
	
	@Column(name="numero")
	private String numero;
	
	public Cotizacion() {
		super();
		// TODO Auto-generated constructor stub
	}
	public Cliente getCliente() {
		return cliente;
	}
	public void setCliente(Cliente cliente) {
		this.cliente = cliente;
	}
	public List<CondicionVenta> getCondiciones() {
		return condiciones;
	}
	public void setCondiciones(List<CondicionVenta> condiciones) {
		this.condiciones = condiciones;
	}
	public Date getFechaRemision() {
		return fechaRemision;
	}
	public void setFechaRemision(Date fechaRemision) {
		this.fechaRemision = fechaRemision;
	}
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}

	public Solicitud getSolicitud() {
		return solicitud;
	}
	public void setSolicitud(Solicitud solicitud) {
		this.solicitud = solicitud;
	}
	public Integer getTermino() {
		return termino;
	}
	public void setTermino(Integer termino) {
		this.termino = termino;
	}
	public List<ItemCotizacion> getItems() {
		return items;
	}
	public void setItems(List<ItemCotizacion> items) {
		this.items = items;
	}
	public String getNumero() {
		return numero;
	}
	public void setNumero(String numero) {
		this.numero = numero;
	}
	
    public CotizacionDTO getVista(){
    	CotizacionDTO cdto = new CotizacionDTO();
    	cdto.setCliente(cliente.getVista());
    	List<CondicionVentaDTO> ventas=new ArrayList<CondicionVentaDTO>();
    	for(CondicionVenta c:condiciones){
    		ventas.add(c.getVista());
    	}
    	cdto.setCondiciones(ventas);
    	cdto.setFechaRemision(fechaRemision);
    	cdto.setId(id);
    	List<ItemCotizacionDTO> itemsc=new ArrayList<ItemCotizacionDTO>();
    	for(ItemCotizacion c:items){
    		itemsc.add(c.getVista());
    	}
    	cdto.setItems(itemsc);
    	cdto.setNumero(numero);
    	cdto.setSolicitud(solicitud.getVista());
    	cdto.setTermino(termino);
		return cdto;
    }
    
    
    
}
